package com.ruoyi.system.util;

import com.ruoyi.system.enumeration.ResultCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseResponse<T> {
    private int code;       // 状态码
    private String msg;     // 提示信息
    private T data;         // 业务数据
    private long timestamp = System.currentTimeMillis(); // 时间戳

    public BaseResponse(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }


    // 成功响应（无数据）
    public static <T> BaseResponse<T> success() {
        return new BaseResponse<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), null);
    }

    // 成功响应（含数据）
    public static <T> BaseResponse<T> success(T data) {
        return new BaseResponse<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), data);
    }

    // 失败响应（默认错误码）
    public static <T> BaseResponse<T> error() {
        return new BaseResponse<>(ResultCode.INTERNAL_ERROR.getCode(), ResultCode.INTERNAL_ERROR.getMsg(), null);
    }

    // 失败响应（自定义错误信息）
    public static <T> BaseResponse<T> error(String msg) {
        return new BaseResponse<>(ResultCode.BUSINESS_ERROR.getCode(), msg, null);
    }

    // 失败响应（指定错误码枚举）
    public static <T> BaseResponse<T> error(ResultCode codeEnum) {
        return new BaseResponse<>(codeEnum.getCode(), codeEnum.getMsg(), null);
    }
}